package com.qf.commons.data.result;

import com.ken.mybatis.protocol.BaseResult;
import lombok.Data;

/**
 * 同一返回 R 对象
 * @author YaoJiXing
 * created 2022/8/16 10:02
 */
@Data
//继承以输出分页参数给前端
public class R<T> extends BaseResult {

    private Integer code;
    private String msg;
    private T data;

    //返回成功的R对象
    public static <S> R<S> create(S data) {
        R<S> r = new R<>();
        //成功的状态是固定死的，所以直接写在 创建的时候
        r.setCode(RCodes.SUCC.getCode());
        r.setMsg(RCodes.SUCC.getMsg());
        r.setData(data);
        return r;
    }

    //返回失败的R对象
    //失败的状态码各有不同，因此 需要在触发失败的时候，将状态码传递给失败方法
    public static <S> R<S> createFail(RCodes rCodes) {
        R<S> r = new R<>();
        r.setCode(rCodes.getCode());
        r.setMsg(rCodes.getMsg());
        //返回失败没有数据返回
        return r;
    }

    public static <S> R<S> createFail(RCodes rCodes, S data) {
        R<S> r = new R<>();
        r.setCode(rCodes.getCode());
        r.setMsg(rCodes.getMsg());
        r.setData(data);
        return r;
    }

    public static <S> R<S> createFail(Integer code, String msg) {
        R<S> r = new R<>();
        r.setCode(code);
        r.setMsg(msg);
        return r;
    }
}
